1 package org.naftulin.classpathexplorer.dublicate.imlp;
2
3 import java.io.File;
4 import java.util.Date;
5 import java.util.zip.ZipEntry;
6
7 import org.naftulin.classpathexplorer.AccessibleResource;
8
9 /***
10 * Represents an accessible resource: its location, last modified time, etc.
11 * Imlpements {@link AccessibleResource} interface
12 * @author henry naftulin
13 * @version 1.0
14 */
15 class AccessibleResourceImpl implements AccessibleResource {
16 private final String path;
17 private final String name;
18 private final long lastModified;
19 private final String fullPath;
20 private final AccessibleArchive archive;
21
22 /***
23 * Creates an accessible resource based on file, path to the file, and archive from where resource resides.
24 * @param file resource file
25 * @param path of the resource insided the archive
26 * @param archive where there resource resides
27 */
28 AccessibleResourceImpl(File file, String path, AccessibleArchive archive) {
29 this.archive = archive;
30 this.path = path;
31 this.name = file.getName();
32 this.fullPath = file.getAbsolutePath();
33 this.lastModified = file.lastModified();
34 }
35
36 /***
37 * Creates an accessible resource based on entry inside zipped achive, and archive where the resource resides
38 * @param entry in zipped archive representing the file
39 * @param archive where there resource resides
40 */
41 AccessibleResourceImpl(ZipEntry entry, AccessibleArchive archive) {
42 String entryName = entry.getName();
43 int nameIndex = entryName.lastIndexOf("/");
44 this.archive = archive;
45 this.path = entryName.substring(0, nameIndex+1);
46 this.name = entryName.substring(nameIndex+1);
47 this.fullPath = archive.getPath() + File.pathSeparator + entry.getName();
48 this.lastModified = entry.getTime();
49 }
50
51 /***
52 * Returns the archive the resource is located in.
53 * @return the archive the resource is located in.
54 */
55 public AccessibleArchive getArchive() {
56 return archive;
57 }
58
59 /***
60 * Returns the path for the resource. If resource resides in an archive,
61 * (e.g. zip or jar) path represents a full path: path to the
62 * archive and path of the resource within an archive.
63 * @return the path for the resource.
64 */
65 public String getFullPath() {
66 return fullPath;
67 }
68
69 /***
70 * Returns the last modified Date as long
71 * @return the last modified Date as long
72 */
73 public long getLastModified() {
74 return lastModified;
75 }
76
77 /***
78 * Returns the name of the resource.
79 * @return the name of the resource.
80 */
81 public String getName() {
82 return name;
83 }
84
85 /***
86 * Returns the path for the resource. If resource resides in an archive,
87 * (e.g. zip or jar) path represents a path of the resource within an
88 * archive.
89 * @return the path for the resource.
90 */
91 public String getPath() {
92 return path;
93 }
94
95 /***
96 * Returns a key for the resource.
97 * Key is used for resource registry to recognize dublicate resources.
98 * For archives it's a path (with the name of the archive). For
99 * files it's the path of the file within an archive and the file name.
100 * @return a key identifying a resource.
101 */
102 public String getKey() {
103 return getPath() + getName();
104 }
105
106 /***
107 * Returns the string representation of the resource.
108 * @return the string representation of the resource.
109 */
110 public String toString() {
111 StringBuffer sb = new StringBuffer(20);
112 sb.append(path).append(name);
113 sb.append(" last modified: ").append(new Date(lastModified));
114 sb.append(" from archive: ").append(archive.getPath());
115 sb.append("\n");
116 return sb.toString();
117 }
118
119 /***
120 * Returns the xml representation of the resource.
121 * @return the xml representation of the resource.
122 */
123 public String toXml() {
124 StringBuffer sb = new StringBuffer(20);
125 sb.append("<resource path='");
126 sb.append(path).append("' name='").append(name).append("' ");
127 sb.append("lastModified='").append(new Date(lastModified)).append("'");
128 sb.append(" fromArchive='").append(archive.getPath()).append("' />\n");
129 return sb.toString();
130 }
131 }